home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turnbull China Bikeride
/
Turnbull China Bikeride - Disc 1.iso
/
ARGONET
/
PD
/
PROGRAMMING
/
DESKLIBC
/
SOURCES.ZIP
/
DeskLib
/
!DLSources
/
Libraries
/
Template
/
c
/
Clone
< prev
next >
Wrap
Text File
|
1993-07-14
|
3KB
|
96 lines
/*
#### # # # #
# # # # # The FreeWare C library for
# # ## ### # # # # ### RISC OS machines
# # # # # # # # # # # ___________________________________
# # #### ### ## # # # #
# # # # # # # # # # Please refer to the accompanying
#### ### #### # # ##### # ### documentation for conditions of use
________________________________________________________________________
File: Template.Clone.c
Author: Copyright © 1992 Jason Williams
Thanks to John Winters for supplying the code that I hacked
changed, hacked, rewrote, and then wrote again from scratch!
Version: 1.11 (13 Jul 1993)
Purpose: Loading, cacheing, and retrieval of window templates
*/
#include "TempDefs.h"
extern window_block *Template_Clone(char *name, int maxtitlesize)
{
template_record *t;
window_block *window;
int icon;
icon_block *icons;
t = Template__FindTemplate(name);
if (t == NULL)
return(NULL);
window = (window_block *) malloc(sizeof(window_block) +
(sizeof(icon_block) * t->windowdef->numicons));
if (window == NULL)
Error_ReportFatalInternal(ERR1, ERRMESS1);
memcpy(window, t->windowdef, sizeof(window_block) +
(sizeof(icon_block) * t->windowdef->numicons));
if (window->titleflags.data.indirected)
{
if (maxtitlesize == template_TITLEMIN)
maxtitlesize = window->title.indirecttext.bufflen;
else if (maxtitlesize < 1)
maxtitlesize = 260; /* default ind. title size */
window->title.indirecttext.buffer = (char *) malloc(maxtitlesize);
window->title.indirecttext.bufflen = maxtitlesize;
if (window->title.indirecttext.buffer == NULL)
Error_ReportFatalInternal(ERR1, ERRMESS1);
strncpy(window->title.indirecttext.buffer,
t->windowdef->title.indirecttext.buffer,
window->title.indirecttext.bufflen-1);
window->title.indirecttext.buffer[window->title.indirecttext.bufflen-1] =0;
}
icons = (icon_block *) ((int)window + sizeof(window_block));
for (icon = 0; icon < t->windowdef->numicons; icon++)
{
if (icons[icon].flags.data.indirected && icons[icon].flags.data.text)
{
char *oldtext = icons[icon].data.indirecttext.buffer;
icons[icon].data.indirecttext.buffer = (char *)
malloc(icons[icon].data.indirecttext.bufflen);
if (icons[icon].data.indirecttext.buffer == NULL)
Error_ReportFatalInternal(ERR1, ERRMESS1);
strncpy(icons[icon].data.indirecttext.buffer,
oldtext, icons[icon].data.indirecttext.bufflen - 1);
icons[icon].data.indirecttext.buffer[
icons[icon].data.indirecttext.bufflen - 1] = 0;
oldtext = icons[icon].data.indirecttext.validstring;
if ((int)oldtext > 0)
{
int size;
size = strlencr(oldtext);
icons[icon].data.indirecttext.validstring = (char *) malloc(size + 1);
if (icons[icon].data.indirecttext.validstring == NULL)
Error_ReportFatalInternal(ERR1, ERRMESS1);
strncpy(icons[icon].data.indirecttext.validstring, oldtext, size);
icons[icon].data.indirecttext.validstring[size] = 0;
}
}
}
return(window);
}